package kr.co.bettersoft.waitnumbercustomer.activity;

/*기존 방식*/
//import java.util.ArrayList;
//import java.util.List;
//
//import android.app.Activity;
//import android.content.Context;
//import android.content.Intent;
//import android.graphics.Canvas;
//import android.graphics.drawable.Drawable;
//import android.location.Criteria;
//import android.location.Location;
//import android.location.LocationManager;
//import android.os.Bundle;
//import android.util.Log;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.widget.Toast;
//
//import com.google.android.maps.GeoPoint;
//import com.google.android.maps.ItemizedOverlay;
//import com.google.android.maps.MapActivity;
//import com.google.android.maps.MapController;
//import com.google.android.maps.MapView;
//import com.google.android.maps.MyLocationOverlay;
//import com.google.android.maps.Overlay;
//import com.google.android.maps.OverlayItem;


/*새 방식*/
import kr.co.bettersoft.waitnumbercustomer.common.CommonConstant;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.MapFragment;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;

import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MemberStoreMapPageActivity 

/* 기존 방식 */
//extends MapActivity {
//	
//	String TAG = "MemberStoreMapPageActivity";
//	
//	OverlayItem overlayitem;
//	private Drawable marker = null;
//	private List<OverlayItem> items = new ArrayList<OverlayItem>();
//
//	MapController mapControl;
//	MapView mMap;
//	MyLocationOverlay2 mLocation;
//	String latitude = "";
//	String longitude = "";
//	String companyName = "";
//	int myLat = 0;
//	int myLon = 0;
//
//	int storeLat = 0;
//	int storeLon = 0;
//
//	GeoPoint gt;
//	@Override
//	public void onCreate(Bundle savedInstanceState) {
//		super.onCreate(savedInstanceState);
//		setContentView(R.layout.member_store_map_page_activity);
//
//		
//		// 가맹점 좌표는 받은 것을 사용
//		Intent rIntent = getIntent();
//		latitude = rIntent.getStringExtra("latitude");
//		longitude = rIntent.getStringExtra("longitude");
//		companyName = rIntent.getStringExtra("companyName");
//		if(latitude.length()>0 && longitude.length()>0){
//			storeLat = Integer.parseInt(latitude);
//			storeLon = Integer.parseInt(longitude);
////			Log.d(TAG,"storeLat::"+storeLat+"//storeLon::"+storeLon);
//			
//			// test test test ***  
////			storeLat = 37429000;
////			storeLon = 126820000;
////			Log.d(TAG,"storeLat test ::"+storeLat+"//storeLon::"+storeLon);
//			
//		}else{
//			Toast.makeText(MemberStoreMapPageActivity.this, R.string.no_saved_shop_info, Toast.LENGTH_SHORT).show();
//			finish();
//		}
//		
//		// *** 
//		getMyLocationForNow();
//
//		mMap=(MapView)findViewById(R.id.mapview);
//		mapControl = mMap.getController();
//		mapControl.setZoom(13);
//		mMap.setBuiltInZoomControls(true);
//
//		mLocation = new MyLocationOverlay2(this, mMap); 
//
//		List<Overlay> overlays = mMap.getOverlays();
//		Drawable marker=getResources().getDrawable(R.drawable.pos);
//		marker.setBounds(0,0,marker.getIntrinsicWidth() ,marker.getIntrinsicHeight());
//
//		overlays.add(mLocation);
//
////		mMap.getOverlays().add(new MyLocationOverlay2(this, mMap));		// 좌표를 추가..  test
//		mMap.getOverlays().add(new SitesOverlay(marker));		// 좌표를 추가..
//		
//		mLocation.enableMyLocation();
//		mLocation.enableCompass();
//		try{
//			// 시작은 내 위치로부터.
//			GeoPoint pt = new GeoPoint(myLat, myLon);				// 좌표로 지점 생성.!  내 위치 --> 해당 위치로 가자.		
//			mapControl.setCenter(pt);									// (사용자가 보는 화면의 좌표.)
//
//			gt = new GeoPoint(storeLat,storeLon);
//			mMap.getController().animateTo(gt);				//storeLat,storeLon	// 가맹점 위치로 이동
//		}catch(Exception e){
//			e.printStackTrace();
//		}
//		
//		mLocation.runOnFirstFix(new Runnable() {		// GPS 수신시 동작.
//			public void run() {
//				Log.d(TAG,"mLocation.runOnFirstFix - run");
//				
//				mMap.getController().animateTo(mLocation.getMyLocation());
//				
//			}
//		});
//		
//		
////		// *** test  // -- GPS .. - 화면에 하늘색 표시가 나타남. GPS 의존적임.
////		LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
////		LocationListener mlocListener = new MyLocationListener();
////		mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0 , mlocListener);
//	}
//
//	
////	/**
////	 * test *** 
////	 * MyLocationListener
////	 */
////	public class MyLocationListener implements LocationListener{
////		@Override
////		public void onLocationChanged(Location loc) {
////			loc.getLatitude();
////			loc.getLongitude();
////			String Text = "My Location : " + "Latitude="+loc.getLatitude() + "Longitude="+loc.getLongitude();
////			Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
////		}
////		@Override
////		public void onProviderDisabled(String provider) {
////			Toast.makeText(getApplicationContext(), "onProviderDisabled", Toast.LENGTH_SHORT).show();
////		}
////		@Override
////		public void onProviderEnabled(String provider) {
////			Toast.makeText(getApplicationContext(), "onProviderEnabled", Toast.LENGTH_SHORT).show();
////		}
////		@Override
////		public void onStatusChanged(String provider, int status, Bundle extras) {
//////			Toast.makeText(getApplicationContext(), "onProviderDisabled", Toast.LENGTH_SHORT).show();
////		}
////	}
//	
//	
//	// 새로 좌표값을 구한다.
//	public void getMyLocationForNow(){
//		try{
////			Log.d(TAG,"get my location start");
//			LocationManager lm;
//			Location location;
//			String provider;
//			String bestProvider;
//			lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//			
//			
//			provider = LocationManager.GPS_PROVIDER;
//			Criteria criteria = new Criteria();
//			criteria.setAccuracy(Criteria.ACCURACY_COARSE); // 정확도
//			criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량
//			criteria.setAltitudeRequired(false); // 고도
//			criteria.setBearingRequired(false); // ..
//			criteria.setSpeedRequired(false); // 속도
//			criteria.setCostAllowed(true); // 금전적 비용
//			bestProvider = lm.getBestProvider(criteria, true);
//			location =  lm.getLastKnownLocation(bestProvider);
//			if(location!=null){
//				myLat = (int) (location.getLatitude()*1000000);				// 현위치의 좌표 획득
//				myLon = (int) (location.getLongitude()*1000000);	
//				Log.d(TAG, "runOnFirstFix// location1:"+myLat+", "+myLon);			// 37529466 126921069
////				Toast.makeText(getApplicationContext(), bestProvider+"-location:"+myLat+", "+myLon, Toast.LENGTH_SHORT).show();	// *** 
//				//			new backgroundUpdateLogToServer().execute();	// 비동기로 서버에 위치 업뎃		
//			}else{		// gps
//				location =  lm.getLastKnownLocation(provider);
//				if(location==null){
//					Log.d(TAG,"location = null");	
//				}else{
//					myLat = (int) (location.getLatitude()*1000000);				// 현위치의 좌표 획득
//					myLon = (int) (location.getLongitude()*1000000);	
//					Log.d("runOnFirstFix", "location2:"+myLat+", "+myLon);		
////					Toast.makeText(getApplicationContext(), "GPS_PROVIDER-location2:"+myLat+", "+myLon, Toast.LENGTH_SHORT).show();	// *** 
//				}
//			}
//			
//		}catch(Exception e){
//			e.printStackTrace();
//			Log.w(TAG,"fail to update my location to server");
//		}
//	}
//	
//	
//	
//	
//	
//	
//	
//	
//	
//	
//	
//	
//	/**
//	 * getPoint
//	 *  좌표 단위 수정한다
//	 *
//	 * @param lat
//	 * @param lon
//	 * @return 
//	 */
//	private GeoPoint getPoint(double lat, double lon) {
//		return (new GeoPoint((int) (lat * 1000000.0), (int) (lon * 1000000.0)));
//	}
//
//	@Override
//	protected boolean isRouteDisplayed() {
//		// TODO Auto-generated method stub
//		return false;
//	}
//	public void onResume(){
//		super.onResume();
//		mLocation.enableMyLocation();
//		mLocation.enableCompass();
//	}
//
//	public void onPause(){
//		super.onPause();
//		mLocation.disableMyLocation();
//		mLocation.disableCompass();
//	}
//
//	/**
//	 * MyLocationOverlay2
//	 *  맵위에 오버레이 (터치시 이벤트)
//	 *
//	 */
//	class MyLocationOverlay2 extends MyLocationOverlay{
//		public MyLocationOverlay2(Context context,MapView mapView){
//			super(context,mapView);
//		}
//		
//		protected boolean dispatchTap(){	// 안에있어야 동작. 터치시 토스트. 
//			// 실시간 위치
////			Log.d(TAG,"MyLocationOverlay2 dispatchTap");
////			Toast.makeText(MemberStoreMapPageActivity.this, getString(R.string.its_user_location)+"(l:"+myLat+", "+myLon+")", Toast.LENGTH_SHORT).show();
////			Toast.makeText(MemberStoreMapPageActivity.this, R.string.its_user_location, Toast.LENGTH_SHORT).show();
//			Toast.makeText(MemberStoreMapPageActivity.this, "여기가 사용자위치입니다", Toast.LENGTH_SHORT).show();
//			//			Toast.makeText(MemberStoreMapPageActivity.this, "여기가 사용자위치입니다:"+myLat+","+myLon, Toast.LENGTH_SHORT).show();
//			return false;
//		}
//	}
//
//	
//	
//	/**
//	 * SitesOverlay
//	 *  맵위에 가맹점 마커를 추가한다.
//	 *
//	 */
//	private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
//		private Drawable marker = null;
//		private List<OverlayItem> items = new ArrayList<OverlayItem>();
//		public SitesOverlay(Drawable marker) {
//			super(marker);
//			this.marker = marker;
////			String shop_loc_msg = getString(R.string.its_shop_location);
//			
//			
////			String customer_loc_msg = getString(R.string.its_user_location)+"(m:"+myLat+", "+myLon+")";	// *** 
//			String customer_loc_msg = "여기가 사용자위치입니다"+"(m:"+myLat+", "+myLon+")";	// *** 
////			Log.d(TAG,"storeLat:"+storeLat+"//storeLon:"+storeLon);
////			Log.d(TAG,"myLat:"+myLat+"//myLon:"+myLon);
////			items.add(new OverlayItem(new GeoPoint(storeLat,storeLon), "Store", shop_loc_msg));
//			items.add(new OverlayItem(new GeoPoint(storeLat,storeLon), "Store", companyName));
////			items.add(new OverlayItem(new GeoPoint(myLat,myLon), "Customer", customer_loc_msg));	// *** 
//			
//			//			items.add(new OverlayItem(getPoint(40.748963847316034,-73.96807193756104), "UN", "United Nations"));
//			//			items.add(new OverlayItem(getPoint(40.76866299974387,-73.98268461227417), "Lincoln Center","Home of Jazz at Lincoln Center"));
//			//			items.add(new OverlayItem(getPoint(40.765136435316755,-73.97989511489868), "Carnegie Hall","Where you go with practice, practice, practice"));
//			//			items.add(new OverlayItem(getPoint(40.70686417491799,-74.01572942733765), "The Downtown Club","Original home of the Heisman Trophy"));
//			// 생성된 OverlayItem 을 목록으로 지정
//			populate();
//		}
//
//		// 지정한 번호에 대해 OverlayItem을 return
//
//		@Override
//		protected OverlayItem createItem(int i) {
//			return items.get(i);
//		}
//		@Override
//		public void draw(Canvas canvas, MapView mapView, boolean shadow) {
//			super.draw(canvas, mapView, shadow);
//			// 마커의 아래의 중간 부분이 좌표에 위치하도록 지정
//			boundCenterBottom(marker);
//		}
//		@Override
//		protected boolean onTap(int i) {
//			Toast.makeText(MemberStoreMapPageActivity.this, items.get(i).getSnippet(),Toast.LENGTH_SHORT).show();
//			return true;
//		}
//		//레이어가 처리할 수 있는 항목의 개수를 리턴
//		@Override
//		public int size() {
//			return items.size();
//		}
//	}
//
//	
//	
//    ////////////////////////   하드웨어 메뉴 버튼.  ////////////////
//    @Override
//    public boolean onCreateOptionsMenu(Menu menu) {
//         String tmpstr = getString(R.string.my_location );
//         menu.add(Menu. NONE , Menu.FIRST+1, Menu. NONE, tmpstr );             // 신규등록 메뉴 추가.
//         tmpstr = getString(R.string.shop_location );
//         menu.add(Menu. NONE , Menu.FIRST+2, Menu. NONE, tmpstr );  
//          //              getMenuInflater().inflate(R.menu.activity_main, menu);
//          return (super .onCreateOptionsMenu(menu));
//   }
//    // 옵션 메뉴 특정 아이템 클릭시 필요한 일 처리
//    @Override
//    public boolean onOptionsItemSelected(MenuItem item){
//          return (itemCallback(item)|| super .onOptionsItemSelected(item));
//   }
//    // 아이템 아이디 값 기준 필요한 일 처리
//    public boolean itemCallback(MenuItem item){
//          switch (item.getItemId()){
//          case Menu. FIRST+1:
//        	  // *** 
//        	  getMyLocationForNow();
//  			gt = new GeoPoint(myLat, myLon);
//  			mMap.getController().animateTo(gt);				
//              return true ;
//          case Menu. FIRST+2:
//        	  gt = new GeoPoint(storeLat, storeLon);
//    			mMap.getController().animateTo(gt);				//storeLat,storeLon	// 가맹점 위치로 이동..  -- 안먹음
//        	  return true ;
//         }
//          return false ;
//   }
//    ////////////////////////////////////////////////////////////



/* 새 방식 */
extends FragmentActivity  implements  ConnectionCallbacks, OnConnectionFailedListener, LocationListener{
	String TAG = "MemberStoreMapPageActivity";
	
	// 폰트
	private Typeface typefaceNanumGothic= null; 
	private Typeface typefaceNanumGothicBold = null;
	
	// 맵 레이아웃. 로딩중 기본 맵을 보여주지 않기 위함. 추후 프로그래스바를 보여주도록 할 수 있음.
	View mapLayout;
	
	Button topNaviCloseBtn; 		// 상단 닫기 버튼
	TextView titleBar;				// 타이틀
	TextView storeAddressText;		// 상단 주소창
	
	// 진행바
	ProgressBar pb1;		// 중단 로딩 진행바
	
	// 맵
	private GoogleMap mMap;

	// 줌 설정 값
	float zommLv = 15.0f;
	
	Double myNowLocLat;
	Double myNowLocLng;
	Boolean checkOne = false;
	
	
	String storeLatitude;
	String storeLongitude;
	String storeCompanyName;
	String storeFullAddress;
	
	// 가맹점 정보 -  
	Double storeLocLat;
	Double storeLocLng;		
	String storeLocName = "";
	  private LocationClient mLocationClient;
//	  private TextView mMessageView;
	// These settings are the same as the settings for the map. They will in fact give you updates at
	  // the maximal rates currently possible.
	  private static final LocationRequest REQUEST = LocationRequest.create()
	      .setInterval(5000)         // 5 seconds
	      .setFastestInterval(16)    // 16ms = 60fps
	      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
	  
/////////////////////////////////////////////////////////////////////////////////////////////////////////
  
	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		// 받아온결과를 화면에 뿌려준다.
				if(b.getInt("order")==1){
					// 프로그래스바 실행
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 프로그래스바  종료
					pb1.setVisibility(View.INVISIBLE);
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};
  
/////////////////////////////////////////////////////////////////////////////////////////////////////////	  
	  
	  
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE );		// 타이틀바 제거
		setContentView(R.layout.member_store_map_activity_v2);
		
//		setUpMapIfNeeded();
	      
		// 숨김 용도
		mapLayout = findViewById(R.id.map_layout);
		
		topNaviCloseBtn = (Button) findViewById(R.id.top_navi_close_btn);
		// 상단 닫기 버튼
		topNaviCloseBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				finish();
			}
		});
		// 타이틀
		titleBar = (TextView) findViewById(R.id.title_bar);
		// 상단 주소창
		storeAddressText =  (TextView) findViewById(R.id.store_address_text);
		
		
		// progress bar
		pb1 = (ProgressBar) findViewById(R.id.member_store_map_progressbar);		// 로딩(중앙)
		
		Intent storeIntent = getIntent();
		storeLatitude = storeIntent.getStringExtra("latitude");
		storeLongitude = storeIntent.getStringExtra("longitude");
		storeCompanyName = storeIntent.getStringExtra("companyName");
		storeFullAddress = storeIntent.getStringExtra("fullAddress");
		storeAddressText.setText(storeFullAddress);
		
		storeLocLat = Double.valueOf(storeLatitude);
		storeLocLng = Double.valueOf(storeLongitude);
		storeLocName = storeCompanyName;
		showPb();
		
		
		// 폰트 지정.
	    typefaceNanumGothic = Typeface.createFromAsset(getAssets(), CommonConstant.NanumGothic);  
	    typefaceNanumGothicBold = Typeface.createFromAsset(getAssets(), CommonConstant.NanumGothicBold);
	 // 폰트 적용
	    titleBar.setTypeface(typefaceNanumGothic);		
	    storeAddressText.setTypeface(typefaceNanumGothic);		 
		
	}

/////////////////////////////////////////////////////////////////////////////////////////////////////////	  

	
	@Override
	  protected void onResume() {
	    super.onResume();
	    setUpMapIfNeeded();
	    setUpLocationClientIfNeeded();
	    mLocationClient.connect();
	    
	    if(!checkOne){		// 한번만 실행
	    	 addMarker(storeLocLat, storeLocLng, storeLocName);
	    	 setMove(storeLocLat, storeLocLng);		// 시작위치 - 가맹점으롯
	   	  mapLayout.setVisibility(View.VISIBLE);		// ***  초기 로딩을 줄이기 위해 
	   	  hidePb();
//	   	  checkOne = true;		// 위치 잡았을때 처리됨.
	    }	    
	  }

	  @Override
	  public void onPause() {
	    super.onPause();
	    if (mLocationClient != null) {
	      mLocationClient.disconnect();
	    }
	  }

	  // 맵 세팅
	  private void setUpMapIfNeeded() {
	    // Do a null check to confirm that we have not already instantiated the map.
	    if (mMap == null) {
	      // Try to obtain the map from the SupportMapFragment.
	      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
	             .getMap();
	      // Check if we were successful in obtaining the map.
	      if (mMap != null) {
	        mMap.setMyLocationEnabled(true);
	      }
	      
	      // 줌을 유지하기 위한 조치
	      mMap.setOnCameraChangeListener(getCameraChangeListener());
	      }
	  }

	  // 줌인 한 상태라면 그대로 유지되고, 하지 않았다면 기본 값으로 줌하도록 한다.
	  public OnCameraChangeListener getCameraChangeListener(){
		  return new OnCameraChangeListener(){
			  @Override
			  public void onCameraChange(CameraPosition position){
				  if(position.zoom > 15.0f){
					  zommLv = position.zoom;
				  }else{
					  zommLv = 15.0f;
				  }
			  }
		  };
	  }
	  
	  // 사용자 위치
	  private void setUpLocationClientIfNeeded() {
	    if (mLocationClient == null) {
	      mLocationClient = new LocationClient(getApplicationContext(),
	    		  this,  // ConnectionCallbacks
	          this); // OnConnectionFailedListener
	    }
	  }

	  /**
	   * Button to get current Location. This demonstrates how to get the current Location as required,
	   * without needing to register a LocationListener.
	   */
	  public void showMyLocation(View view) {		// 내 위치.
	    if (mLocationClient != null && mLocationClient.isConnected()) {
	      String msg = "Location = " + mLocationClient.getLastLocation();
	      Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
	    }
	  }

	  /**
	   * Implementation of {@link LocationListener}.
	   */
	  @Override
	  public void onLocationChanged(Location location) {
//	    mMessageView.setText("Location = " + location);
		  
		  myNowLocLat = location.getLatitude();
		  myNowLocLng = location.getLongitude();
		  if(!checkOne){		// 한번만 카메라 이동. 
//			  setMove(myNowLocLat, myNowLocLng);		// 자기 위치 잡으면 자기 위치로 자동 이동되도록.. -> 그냥 가맹점 위치 유지하도록 함
//			  mapLayout.setVisibility(View.VISIBLE);		//  *** 여기에 두면 위치 못잡으면 계속 로딩 되기 때문에..
//			  hidePb();
			  checkOne = true;
		  }
	  }

	  /**
	   * Callback called when connected to GCore. Implementation of {@link ConnectionCallbacks}.
	   */
	  @Override
	  public void onConnected(Bundle connectionHint) {
	    mLocationClient.requestLocationUpdates(
	        REQUEST,
	        this);  // LocationListener
	    	Log.d(TAG,"onConnected");
	  }

	  /**
	   * Callback called when disconnected from GCore. Implementation of {@link ConnectionCallbacks}.
	   */
	  @Override
	  public void onDisconnected() {
	    // Do nothing
	  }
	  /**
	   * Implementation of {@link OnConnectionFailedListener}.
	   */
	  @Override
	  public void onConnectionFailed(ConnectionResult result) {
	    // Do nothing
	  }
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	  
	  
	//마커찍기 함수
	  void addMarker(double lat, double lng, String storeLocName){
		  mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(storeLocName));
	  }

	  // 카메라 이동  -- 이전 버전의 animateTo 와 같은 기능을 제공함		// 점프해서 이동한다.
	  void setAnimate(double lat, double lng){
		  
//		  mMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lng)));
		  mMap.animateCamera(CameraUpdateFactory.newLatLngZoom((new LatLng(lat, lng)), zommLv));
	  }
	  // V2 에서 바뀐점은 CameraUpdate 라는 클래스를 사용하는것인데, 이 클래스를 사용할때는 CameraUpdateFactory 를 가져와서 사용하고, LatLng 클래스를 사용한다는것.


	  // moveCamera 함수는 animateCamera 처럼 애니메이션이 적용되지 않고, 바로바로 맵이 이동되는 함수입니다.		// 바로 이동한다.
	  void setMove(double lat, double lng){
//		  mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lng)));
		  mMap.moveCamera(CameraUpdateFactory.newLatLngZoom((new LatLng(lat, lng)), zommLv));
	  }

	  
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	  
	  
    ////////////////////////   하드웨어 메뉴 버튼.  ////////////////
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
         String tmpstr = getString(R.string.my_location );
         menu.add(Menu. NONE , Menu.FIRST+1, Menu. NONE, tmpstr );             // 신규등록 메뉴 추가.
         tmpstr = getString(R.string.shop_location );
         menu.add(Menu. NONE , Menu.FIRST+2, Menu. NONE, tmpstr );  
          //              getMenuInflater().inflate(R.menu.activity_main, menu);
          return (super .onCreateOptionsMenu(menu));
   }
    // 옵션 메뉴 특정 아이템 클릭시 필요한 일 처리
    @Override
    public boolean onOptionsItemSelected(MenuItem item){
          return (itemCallback(item)|| super .onOptionsItemSelected(item));
   }
    // 아이템 아이디 값 기준 필요한 일 처리
    public boolean itemCallback(MenuItem item){
          switch (item.getItemId()){
          case Menu. FIRST+1:
        	  // *** 
        	  if(checkOne){		// 내 위치 잡힌 경우에만.
        		  setAnimate(myNowLocLat, myNowLocLng);	
        	  }
//        	  setMove(myNowLocLat, myNowLocLng);	
              return true ;
          case Menu. FIRST+2:
        	  setAnimate(storeLocLat, storeLocLng);		// 하드코딩, 대략 교보			//storeLat,storeLon	// 가맹점 위치로 이동..  -- 안먹음
//        	  setMove(storeLocLat, storeLocLng);		// 하드코딩, 대략 교보			//storeLat,storeLon	// 가맹점 위치로 이동..  -- 안먹음
        	  return true ;
         }
          return false ;
   }
    ////////////////////////////////////////////////////////////
	  
	  
    // 중앙 프로그래스바 보임, 숨김
	/**
	 * showPb
	 *  중앙 프로그래스바 가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showPb(){
		new Thread( 
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 1);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}
	/**
	 * hidePb
	 *  중앙 프로그래스바 비가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hidePb(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 2);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}  
	  
}
